bitkeeper revision 1.1159.224.5 (41f14ef5rOG9bCYLcvdZA7IP1BEjng)
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Fri, 21 Jan 2005 18:50:29 +0000 (18:50 +0000)
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>
Fri, 21 Jan 2005 18:50:29 +0000 (18:50 +0000)
manual merge

1  2 
xen/arch/x86/dom0_ops.c
xen/arch/x86/domain.c
xen/common/Makefile
xen/common/dom0_ops.c
xen/common/domain.c
xen/common/keyhandler.c
xen/drivers/char/console.c
xen/include/asm-x86/mm.h
xen/include/public/arch-x86_32.h
xen/include/public/xen.h
xen/include/xen/domain.h

Simple merge
index c74d9b32c3af8d85d95472e979870c1efeb2eba6,2ba535a3ac5b1c4205cc630cbef8ab9e1d37250c..31273080e0b9ecf494d71b0a570570c36bba459e
@@@ -203,12 -196,54 +203,54 @@@ void machine_halt(void
      __machine_halt(NULL);
  }
  
+ void dump_pageframe_info(struct domain *d)
+ {
+     struct pfn_info *page;
+     struct list_head *ent;
+     if ( d->tot_pages < 10 )
+     {
+         list_for_each ( ent, &d->page_list )
+         {
+             page = list_entry(ent, struct pfn_info, list);
+             printk("Page %08x: caf=%08x, taf=%08x\n",
+                    page_to_phys(page), page->count_info,
+                    page->u.inuse.type_info);
+         }
+     }
+     
+     page = virt_to_page(d->shared_info);
+     printk("Shared_info@%08x: caf=%08x, taf=%08x\n",
+            page_to_phys(page), page->count_info,
+            page->u.inuse.type_info);
+ }
+ xmem_cache_t *domain_struct_cachep;
+ void __init domain_startofday(void)
+ {
+     domain_struct_cachep = xmem_cache_create(
+         "domain_cache", sizeof(struct domain),
+         0, SLAB_HWCACHE_ALIGN, NULL, NULL);
+     if ( domain_struct_cachep == NULL )
+         panic("No slab cache for domain structs.");
+ }
+ struct domain *arch_alloc_domain_struct(void)
+ {
+     return xmem_cache_alloc(domain_struct_cachep);
+ }
+ void arch_free_domain_struct(struct domain *d)
+ {
+     xmem_cache_free(domain_struct_cachep, d);
+ }
  void free_perdomain_pt(struct domain *d)
  {
 -    free_xenheap_page((unsigned long)d->mm.perdomain_pt);
 +    free_xenheap_page((unsigned long)d->mm_perdomain_pt);
  }
  
 -static void continue_idle_task(struct domain *d)
 +static void continue_idle_task(struct exec_domain *ed)
  {
      reset_stack_and_jump(idle_loop);
  }
Simple merge
Simple merge
Simple merge
index 91b983347af6573b467d330ad24b38dcc0e6f7e6,ef62fc4a5a538f8d350d4b49e31f3d05da65688a..e99d5a638167d627440ca6e92b107740f0f13cbc
@@@ -96,10 -96,7 +96,8 @@@ static void halt_machine(unsigned char 
  void do_task_queues(unsigned char key)
  {
      struct domain *d;
 +    struct exec_domain *ed;
      s_time_t       now = NOW();
-     struct list_head *ent;
-     struct pfn_info  *page;
  
      printk("'%c' pressed -> dumping task queues (now=0x%X:%08X)\n", key,
             (u32)(now>>32), (u32)now); 
  
      for_each_domain ( d )
      {
 -        printk("Xen: DOM %u, CPU %d [has=%c] flags=%lx refcnt=%d nr_pages=%d "
 -               "xenheap_pages=%d\n",
 -               d->id, d->processor, 
 -               test_bit(DF_RUNNING, &d->flags) ? 'T':'F', d->flags,
 +        printk("Xen: DOM %u, flags=%lx refcnt=%d nr_pages=%d "
 +               "xenheap_pages=%d\n", d->id, d->d_flags,
                 atomic_read(&d->refcnt), d->tot_pages, d->xenheap_pages);
  
-         if ( d->tot_pages < 10 )
-         {
-             list_for_each ( ent, &d->page_list )
-             {
-                 page = list_entry(ent, struct pfn_info, list);
-                 printk("Page %08x: caf=%08x, taf=%08x\n",
-                        page_to_phys(page), page->count_info,
-                        page->u.inuse.type_info);
-             }
-         }
-         page = virt_to_page(d->shared_info);
-         printk("Shared_info@%08x: caf=%08x, taf=%08x\n",
-                page_to_phys(page), page->count_info,
-                page->u.inuse.type_info);
+         dump_pageframe_info(d);
                 
 -        printk("Guest: upcall_pend = %02x, upcall_mask = %02x\n", 
 -               d->shared_info->vcpu_data[0].evtchn_upcall_pending, 
 -               d->shared_info->vcpu_data[0].evtchn_upcall_mask);
 -        printk("Notifying guest...\n"); 
 -        send_guest_virq(d, VIRQ_DEBUG);
 +        for_each_exec_domain ( d, ed ) {
 +            printk("Guest: %p CPU %d [has=%c] flags=%lx "
 +                   "upcall_pend = %02x, upcall_mask = %02x\n", ed,
 +                   ed->processor,
 +                   test_bit(EDF_RUNNING, &ed->ed_flags) ? 'T':'F',
 +                   ed->ed_flags,
 +                   ed->vcpu_info->evtchn_upcall_pending, 
 +                   ed->vcpu_info->evtchn_upcall_mask);
 +            printk("Notifying guest... %d/%d\n", d->id, ed->eid); 
 +            printk("port %d/%d stat %d %d %d\n",
 +                   VIRQ_DEBUG, ed->virq_to_evtchn[VIRQ_DEBUG],
 +                   test_bit(ed->virq_to_evtchn[VIRQ_DEBUG], &d->shared_info->evtchn_pending[0]),
 +                   test_bit(ed->virq_to_evtchn[VIRQ_DEBUG], &d->shared_info->evtchn_mask[0]),
 +                   test_bit(ed->virq_to_evtchn[VIRQ_DEBUG]>>5, &ed->vcpu_info->evtchn_pending_sel));
 +            send_guest_virq(ed, VIRQ_DEBUG);
 +        }
      }
  
      read_unlock(&domlist_lock);
Simple merge
index 89ff350fe7fdf77f4001e8b01e3d33493a525991,2af462e37df0f8bd1affd82d2f83b6367407e088..180d83e37da4a68ede164f95939cecfdb3e2c714
@@@ -230,9 -222,10 +230,11 @@@ extern unsigned long *phys_to_machine_m
     m2p_start_mfn instead. */
  #define machine_to_phys_mapping ((unsigned long *)RDWR_MPT_VIRT_START)
  extern unsigned long m2p_start_mfn;
 +#define phys_to_machine_mapping ((unsigned long *)PERDOMAIN_VIRT_START)
  #endif
  
+ #define set_machinetophys(_mfn, _pfn) machine_to_phys_mapping[(_mfn)] = (_pfn)
  #define DEFAULT_GDT_ENTRIES     (LAST_RESERVED_GDT_ENTRY+1)
  #define DEFAULT_GDT_ADDRESS     ((unsigned long)gdt_table)
  
Simple merge
Simple merge
index afdae5aa44c7062d8ba47c97cbcd2c908a2aca23,94d1e0163508dc41b4853f2c717beee3c1741273..4fd86f51f8e30e0ddbbdb26691c66d3e3c031f39
@@@ -8,10 -6,16 +6,16 @@@
   * Arch-specifics.
   */
  
- extern void arch_do_createdomain(struct exec_domain *d);
+ extern void domain_startofday(void);
+ extern struct domain *arch_alloc_domain_struct(void);
+ extern void arch_free_domain_struct(struct domain *d);
+ extern void arch_do_createdomain(struct domain *d);
  
  extern int  arch_final_setup_guestos(
 -    struct domain *d, full_execution_context_t *c);
 +    struct exec_domain *d, full_execution_context_t *c);
  
  extern void free_perdomain_pt(struct domain *d);